home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / pascal / cdplay.exe / CDPLAY.PAS < prev    next >
Pascal/Delphi Source File  |  1993-03-27  |  5KB  |  167 lines

  1. { Copyright 1993 by Michael W. Armstrong.
  2.                     2800 Skipwith Rd
  3.                     Richmond, VA 23294
  4.  
  5.   Compuserve ID 72740, 1145
  6.   This program is entered as Shareware.  If you find it useful, a small
  7.   donation would be appreciated.  Feel free to incorporate the code into
  8.   your own programs.
  9. }
  10.  
  11. {$X+}
  12. program CDPlay;
  13.  
  14. {$IfDef Windows}
  15. {$C PRELOAD}
  16. uses CD_Vars, CDUnit_P, WinCRT, WinProcs;
  17. {$Else}
  18. uses CD_Vars, CDUnit_P, CRT, Drivers;
  19. {$EndIf}
  20.  
  21. Type
  22.   TotPlayRec = Record
  23.      Frames,
  24.      Seconds,
  25.      Minutes,
  26.      Nada     : Byte;
  27.   End;
  28.  
  29. Var
  30.   GoodDisk : Boolean;
  31.   SaveExit   : Pointer;
  32.   OldMode    : Word;
  33.   CurrentTrack,
  34.   StartTrack,
  35.   EndTrack   : Integer;
  36.   TotPlay    : TotPlayRec;
  37.   TrackInfo  : Array[1..99] of PAudioTrackInfo;
  38.  
  39. function LeadingZero(w: Word): String;
  40. var s: String;
  41. begin
  42.   Str(w:0, s);
  43.   LeadingZero := Copy('00', 1, 2 - Length(s)) + s;
  44. end;
  45.  
  46.  
  47. procedure DrawScreen;
  48. Const TStr = '%03d:%02d';
  49.       VStr = '%1d.%2d';
  50. Var   FStr : PChar;
  51.       NStr : String;
  52.       Param: Array[1..2] of LongInt;
  53.       Code : Integer;
  54. begin
  55.   WriteLn('CD ROM Audio Disk Player');
  56.   WriteLn('Copyright 1992 by M. W. ARMSTRONG');
  57.   Param[1] := MSCDEX_Version.Major;
  58.   Param[2] := MSCDEX_Version.Minor;
  59.  
  60. {$IfDef Windows}
  61.   wvsPrintf(FStr, VStr, Param);
  62. {$Else}
  63.   FormatStr(NStr, VStr, Param);
  64. {$EndIf}
  65.  
  66.   WriteLn('MSCDEX Version ', NStr);
  67.   Str(NumberOfCD, NStr);
  68.   WriteLn('Number of CD ROM Drives is: '+Nstr);
  69.   WriteLn('First CD Drive Letter is  : '+Chr(FirstCD+65));
  70.   WriteLn('There are ' + LeadingZero(EndTrack - StartTrack + 1) + ' Tracks on this disk');
  71.   Code := 1;
  72. end;
  73. {***********************************************************************}
  74.  
  75. {***********************************************************************}
  76.  
  77.  
  78. procedure Setup;
  79. Var
  80.   LeadOut,
  81.   StartP,
  82.   TotalPlayTime    : LongInt;
  83.   I     : Integer;
  84.   A,B,C : LongInt;
  85.   Track : Byte;
  86.   EA    : Array[1..4] of Byte;
  87.   SP,EP : LongInt;
  88.  
  89. Begin
  90.   FillChar(AudioDiskInfo, SizeOf(AudioDiskInfo), #0);
  91.   DeviceStatus;
  92.   If Audio THEN
  93.   Begin
  94.     Audio_Disk_Info;
  95.     TotalPlayTime := 0;
  96.     LeadOut := AudioDiskInfo.LeadOutTrack;
  97.  
  98.     StartTrack := AudioDiskInfo.LowestTrack;
  99.     EndTrack := AudioDiskInfo.HighestTrack;
  100.     CurrentTrack := StartTrack;
  101.     I := StartTrack-1;
  102.  
  103.     Repeat               { Checks if Audio Track or Data Track }
  104.         Inc(I);
  105.         Track := I;
  106.         Audio_Track_Info(StartP, Track);
  107.     Until (Track AND 64 = 0) OR (I = EndTrack);
  108.  
  109.     StartTrack := I;
  110.  
  111.     For I := StartTrack to EndTrack DO
  112.       Begin
  113.         Track := I;
  114.         Audio_Track_Info(StartP, Track);
  115.         New(TrackInfo[I]);
  116.         FillChar(TrackInfo[I]^, SizeOf(TrackInfo[I]^), #0);
  117.         TrackInfo[I]^.Track := I;
  118.         TrackInfo[I]^.StartPoint := StartP;
  119.         TrackInfo[I]^.TrackControl := Track;
  120.       End;
  121.  
  122.     For I := StartTrack to EndTrack - 1 DO
  123.         TrackInfo[I]^.EndPoint := TrackInfo[I+1]^.StartPoint;
  124.     TrackInfo[EndTrack]^.EndPoint := LeadOut;
  125.  
  126.     For I := StartTrack to EndTrack DO
  127.         Move(TrackInfo[I]^.EndPoint, TrackInfo[I]^.Frames, 4);
  128.  
  129.     TrackInfo[StartTrack]^.PlayMin := TrackInfo[StartTrack]^.Minutes;
  130.     TrackInfo[StartTrack]^.PlaySec := TrackInfo[StartTrack]^.Seconds - 2;
  131.  
  132.     For I := StartTrack + 1 to EndTrack DO
  133.       Begin
  134.         EP := (TrackInfo[I]^.Minutes * 60) + TrackInfo[I]^.Seconds;
  135.         SP := (TrackInfo[I-1]^.Minutes * 60) + TrackInfo[I-1]^.Seconds;
  136.         EP := EP - SP;
  137.         TrackInfo[I]^.PlayMin := EP DIV 60;
  138.         TrackInfo[I]^.PlaySec := EP Mod 60;
  139.       End;
  140.  
  141.     TotalPlayTime := AudioDiskInfo.LeadOutTrack - TrackInfo[StartTrack]^.StartPoint;
  142.     Move(TotalPlayTime, TotPlay, 4);
  143.   End;
  144. end;
  145.  
  146. {***********************************************************************}
  147.  
  148.  
  149. Begin
  150.   Setup;
  151.   If Audio THEN
  152.   If Playing THEN
  153.      StopAudio
  154.   ELSE
  155.      Begin
  156.        StopAudio;
  157.        Play_Audio(TrackInfo[StartTrack]^.StartPoint,
  158.              TrackInfo[EndTrack]^.EndPoint);
  159.        Audio_Status_Info;
  160.        DrawScreen;
  161.      End
  162.   ELSE
  163.       WriteLn('This is not an Audio CD');
  164.   WriteLn('UPC Code is: ', UPC_Code);
  165. end.
  166.